[TOC]
CDH 简介
为什么 在 Hadoop 2.x 中 HDFS 中有 ZKFC 进程,而 yarn 却没有?
在 Hadoop 1.x 升级到 Hadoop 2.x 的过程中,考虑到向下兼容的问题,NameNode 进程没有嵌入 ZKFC 中的代码,而另外开辟一个进程 ZKFC 。再者由于 Hadoop 1.x 中没有 yarn 组件,Hadoop 2.x 中才出现的 yarn 组件,所以 yarn 不用考虑向下兼容的问题,即 ResourceManager 进程就直接嵌入 ZKFC 中的代码,只运行一个进程。
Apache Hadoop 不足之处
- 版本管理混乱
- 部署过程繁琐、升级过程复杂
- 兼容性差
- 安全性低
Hadoop 发行版
- Apache Hadoop
- Cloudera’s Distribution Including Apache Hadoop(CDH)
- Hortonworks Data Platform (HDP)
- MapR
- EMR
Cloudera’s Distribution, including Apache Hadoop
是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建
提供了Hadoop的核心
- 可扩展存储
- 分布式计算
基于Web的用户界面
CDH 框架
CDH 框架图
Impala 是基于内存计算的,执行 SQL ,速度比 Hive 要快

CDH 的优点
版本划分清晰
版本更新速度快
支持Kerberos安全认证
文档清晰
支持多种安装方式(Cloudera Manager方式)
CDH 安装方式
- Cloudera Manager
- Yum
- Rpm
- Tarball
CDH5.4
http://archive.cloudera.com/cdh5/
Cloudera Manager5.4.3:
http://www.cloudera.com/downloads/manager/5-4-3.html
CDH 安装
Cloudera Manager 简介
1 | Server |

Cloudera Manager 部署
系统环境准备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48使用 xshell 登录时
不能 open 方式登录,可能会影响后面 ssh 免密
而是采用 ssh 方式登录
ssh 免密钥
ssh localhost 方式创建本地目录
1、网络配置
vi /etc/sysconfig/network
vi /etc/hosts
2、SSH免密钥登录
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id
3、防火墙关闭
service iptables stop
chkconfig iptables off
4、SELINUX关闭
setenforce 0
vi /etc/selinux/config (SELINUX=disabled)
5、安装JDK配置环境变量
export JAVA_HOME=/usr/java/jdkXXX
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
6、安装NTP
获取阿里云
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
更新 yum 缓存
yum makecache
yum install -y ntp
设置开机启动
chkconfig ntpd on
启动 ntpd 服务
service ntpd start
设置时间同步
ntpdate ntp1.aliyun.com
7、安装配置mysql
yum install -y mysql-server
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
flush privileges
8、下载第三方依赖包
yum install -y chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb
cloudera Manager 安装
集群分发时,一定要先分发,后启动
HOST node06 node07 node08 IP 192.168.170.106 192.168.170.107 192.168.170.108 Server * Agent * * * 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
411、安装Cloudera Manager Server、Agent
mkdir /opt/cloudera-manager # (node06,node07,node08)
tar xvzf cloudera-manager*.tar.gz -C /opt/cloudera-manager
2、创建用户cloudera-scm # (node06,node07,node08)
useradd --system --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
3、配置CM Agent # (node06)
修改文件/opt/cloudera-manager/cm-5.4.3/etc/cloudera-scm-agent/config.ini中server_host
4、配置CM Server数据库 # (node06)
拷贝mysql jar文件到目录 /usr/share/java/
注意jar包名称要修改为mysql-connector-java.jar
node06
grant all on *.* to 'temp'@'%' identified by 'temp' with grant option;
cd /opt/cloudera-manager/cm-5.4.3/share/cmf/schema/
./scm_prepare_database.sh mysql temp -h node06 -utemp -ptemp --scm-host node06 scm scm scm
格式:数据库类型、数据库、数据库服务器、用户名、密码、cm server服务器
Server节点 #(node06)
mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
Agent节点 # (node06,node07,node08)
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
6、制作CDH本地源 #(node06)
下载好文件CDH-5.4.0-1.cdh5.4.0.p0.27-el6.parcel以及manifest.json,将这两个文件放到server节点的/opt/cloudera/parcel-repo下。
打开manifest.json文件,里面是json格式的配置,找到与下载版本相对应的hash码,新建文件,文件名与你的parel包名一致,并加上.sha后缀,将hash码复制到文件中保存。
7、分发
cd /opt/cloudera-manager/
scp -r ./* root@node07:`pwd`
scp -r ./* root@node08:`pwd`
8、启动CM Server、Agent
cd /opt/cloudera-manager/cm-5.4.3/etc/init.d/
./cloudera-scm-server start
Sever首次启动会自动创建表以及数据,不要立即关闭或重启,否则需要删除所有表及数据重新安装
./cloudera-scm-agent start
小技巧: 1. 若运行某个指令执行任务阻塞当前 shell 窗口,且想中断运行该任务,若 Ctrl + C不能中断停止,可使用 Ctrl + Z 将当前任务放到后台进行,从而不阻塞当前 shell 窗口,然后输入 jobs -l,显示当前任务作业的状态及进程号,由 kill -9 进程号,强制终止任务作业 2. netstat -natp |grep 进程号,查看某个进程使用的端口号
访问 Clouder-manager 的 web 界面
1
2
3访问:http://ManagerHost:7180,
用户名、密码:admin
若可以访问,则CM安装成功。为什么集群个数更倾向于奇数个,而不是偶数个?
1
2
3
4
5
6
7
8以 3 台集群和 4 台集群举例:
3 台集群,若其中有一台宕机了,3 / 2 = 1.5 < 2,达到了过半的条件,集群可以运行。
4 台集群,若其中有一台宕机了,4 / 2 = 2 < 3,达到了过半的条件,集群也可以运行。
但是4 台主机集群和 3台主机集群却承担相同的风险,且成本 4 台主机集群的成本比 3 台主机集群的成本高
举例,若 4 台主机集群中,宕机了 2 台,剩余 2 台,不满足集群主机数量过分的条件,就不保证了集群的数据一致性,进而集群的可用性。同样 3 台主机集群中,宕机了 2台,剩余 1台,也满足集群主机数量过半的条件,即 4 台主机集群和 3台主机集群却承担相同的风险。
说明: 集群中主机数量过半才能正常运行,因为集群中的网络条件等其他因素,可能会出现某台主机在一定时间内不能接受到或者发送消息,所以以集群中主机数量过半作为条件,是较为合理的。
Hue
Hue是一个开源的Apache Hadoop UI系统。
通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据。
例如操作HDFS上的数据、运行Hive脚本、管理Oozie任务等等。是基于Python Web框架Django实现的。
支持任何版本Hadoop
Hue 的特点:
基于文件浏览器(File Browser)访问HDFS
基于web编辑器来开发和运行Hive查询
支持基于Solr进行搜索的应用,并提供可视化的数据视图,报表生成
通过web调试和开发impala交互式查询
spark调试和开发
Pig开发和调试
oozie任务的开发,监控,和工作流协调调度
Hbase数据查询和修改,数据展示
Hive的元数据(metastore)查询
MapReduce任务进度查看,日志追踪
创建和提交MapReduce,Streaming,Java job任务
Sqoop2的开发和调试
Zookeeper的浏览和编辑
数据库(MySQL,PostGres,SQlite,Oracle)的查询和展示
ClouderaManager 使用 impala_oozie
ClouderManager 功能使用
主机 - host
机架 - rack
集群 - Cluster
服务 - service
服务实例 - service instance
角色 - role
角色实例 - role instance
角色组 - role group
主机模板 - host template
parcel
静态服务池 - static service pool
动态资源池 - dynamic resource pool
1、集群管理
添加、删除集群
启动、停止、重启集群
重命名集群
全体集群配置
移动主机
2、主机管理
查看主机详细
主机检查
集群添加主机
分配机架
主机模板
维护模式
删除主机
3、服务管理
添加服务
对比不同集群上的服务配置
启动、停止、重启服务
滚动重启
终止客户端正在执行的命令
删除服务
重命名服务
配置最大进程数
rlimit_fds
4、角色管理
角色实例
添加角色实例
启动、停止、重启角色实例
解除授权
重新授权
删除角色实例
角色组
创建角色组
管理角色组
5、资源管理
动态资源池
静态服务池
6、用户管理
7、安全管理
安装 Hive
图形化操作
中间要 Hive 在关系型数据库建立表,并授权
1 | create database hive DEFAULT CHARACTER SET utf8; |
安装 OOZIE
同样图形化操作
中间要为 OOZIE 在关系型数量库建立库,并授权
1 | create database oozie DEFAULT CHARACTER SET utf8; |
安装 Hub
图形化操作,点点点…
小插曲: 什么叫解耦底层技术的平台产品 ? 直接屏蔽底层的实现
Hue 介绍
代理 HDFS、Hive 、OOIZE 等模块,调用他们的 API ,执行相应的操作,自己只提供了一个 Web 界面,本身并不做什么事情。
Hue 的用户模块
在开始使用 Hue 时,首先要进行登录,登录的用户名和密码,由自己设置。使用 Hue 登录成功后,Hue 会将登录的用户名,告诉给 HDFS ,并在 HDFS 中创建用户家目录。
注意: 使用 HDFS 只需要用户名,并不需要密码,需要登录的是 Hue
Hue 支持文件修改-仅针对小文件
Implal
Cloudera 公司推出,提供对 HDFS 、HBase 数据的高性能、低延迟的交互式 SQL 查询功能
基于 Hive 使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等特点
是 CDH 平台首选的 PB 级大数据实时查询分析引擎
Shuffle
MapReduce Shuffle :
首先数据会进行序列化,然后放入环形字节数组缓冲池,当缓冲池达到阈值(默认为 80 M)后,会触发 spill 溢写操作,将缓冲池中的数据写入磁盘文件中,在过程中,会先进行二次排序、分区等操作。若相同的 key 的文件数量达到三个以上,触发 combiner 操作(归并排序),合并文件。注意: 若相同的 key 文件,spill 溢写二次产生二个文件,但不会执行 combiner 操作。从中得出:MapReduce 不能将相同的 key 文件归并到一个文件中,进而得出,MapReduce 写的时候必须采用二次排序的机制来分区有序,且分区里 key 有序(邻接排列在一起), 才能够保证MapReduce 的原语(相同的 key 为一组,方法内迭代这一组数据)。
MapReduce Shuffile 消耗的计算资源较多,二次排序不可避免
Spark Shuffle:
rpartition : 重新分区 ….
Implal 架构图
Implal 启动后会加载 Hive 的 MeataStore 元数据
Implal 运行速度比 Hive 快的多
Implal 创建元数据会持久化到 Hive 中
Hive 为 Implal 做元数据持久化的操作,而 Hive 的元数据存放在关系型数据库中(MySQL、Oracle 中)

安装 Implal
Catalog Server 安装在 node06 机器上
StateStore 安装在 node06 机器上
Daemon 安装在 node07、node08 机器上

Impala 使用
Impala 的使用 SQL 与 Hive 的使用类似,但是不支持 Hive 一些特殊操作,如: UDF等。
1 | 使用 impala-shell 打开,进入 impala 交互界面 |
压缩数据文件的好处:
- 节省空间开销
- 由于数据文件压缩后,体积变小,进入内存速度变快,因为 IO 小了。
Impala 与 HBase 整合
与 Hive 和 HBase 整合类似
OOZIE
分布式调度
Oozie 是用于 Hadoop 平台的开源的工作流调度引擎
用来管理 Hadoop 作业
属于 web 应用程序,由 Oozie Client 和 Oozie Server 两个组件构成。
Oozie Server 运行于 Java Servlet 容器(tomcat) 中的 web 程序
作用: 一组任务使用一个 DAG(有向无环图) 来表示
Oozie 使用
Oozie 启动成功后,打开 Web 的 UI 界面

解决方法:
1 | unzip ext-2.2.zip -d /var/lib/oozie |
修改 配置 Configuration,保存,重新启动 Oozie

job.properties
1 | nameNode=hdfs://node06:8020 |

workflow.xml
1 | <workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf"> |
